#include <stdio.h>
/*
 * FuncionesGlobales.c
 *
 *  Created on: 18/10/2011
 *      Author: utn_so
 */
char* ERROR_CONFIG_INPUT = "ERROR_CONFG" ;

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>


char* copiarParteDeStrEnStrNuevo(char* stringFinal, char* stringTotal,uint32_t posACopiar, uint32_t cantCharsACopiar){
	uint32_t i;
	for (i=0;i<cantCharsACopiar;i++){
		stringFinal[i] = stringTotal[posACopiar];
		posACopiar++;
	}
	return stringFinal;
}



void loguearDatos(char* datos,FILE* logDatos){			//PARA USAR TIENE QUE ESTAR PREVIAMENTE ABIERTO EL FILE EN MODO "A".

	uint32_t sizeD = strlen(datos);

	printf("%d, : %s",sizeD,datos);
	//strcat(datos,"ssn");
	fwrite(datos,(strlen(datos)),1,logDatos);			//AVERIGUAR MAS ACERCA DEL STRCAT (SEGMENTATION FAULT).
	fwrite("\n",1,1,logDatos);
}

char* procesarComandoConfig(char *comand)
{
    char *comando = (char*)malloc(50);
    uint32_t i = 0;
    size_t SIZE_COMAND = strlen(comand);
    while((comand[i] != '=') && (i < SIZE_COMAND)){

        i++;
    }
    if(i>= SIZE_COMAND){
    	return ERROR_CONFIG_INPUT;
    }


    i++;
    while(comand[i] == ' '){
        i++;
    }
    uint32_t a;
    for(a = 0;i < SIZE_COMAND;a++){
        comando[a] = comand[i];
        i++;
    }
    return comando;
}


void leerConfiguracion(uint32_t pos, FILE* config){
	////////////////////////////////////////////////////////////////////////////
	//	Variables a leer:													  //
	////////////////////////////////////////////////////////////////////////////
	FILE* archConfg = fopen("/home/utn_so/Desarrollo/config.txt","r");
	char* commandU = (char*) malloc(50);
	commandU = fgets(commandU,50,archConfg);

	char* MODO_INICIO = procesarComandoConfig(commandU);

	commandU = fgets(commandU,50,archConfg);

	if((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT){
	char* ALGORITM_PLANIF = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* PUERTO_ESCUCHA_CONSOLA = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* LOGS_FLAG = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* ID_DISCO = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* CHS = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* TIEMP_LECTURA = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* TIEMP_ESCRITURA = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* RPM = procesarComandoConfig(commandU);
	}

	commandU = fgets(commandU,50,archConfg);

	if ((procesarComandoConfig(commandU))!= ERROR_CONFIG_INPUT) {
		char* TIEMP_SALTO_PISTAS = procesarComandoConfig(commandU);
	}
}

uint32_t procesarComandoFS(char* comando) {


	if(strcmp(comando,"leerBoot")==0){
		printf("comando: %s   ....leyendoBoot\n",comando);
		leerBootSector();

		return 0;
		}

	if(strcmp(comando,"leerFAT")==0){
		printf("comando: %s   ....leyendoFAT\n",comando);
		return 0;
		}

	if(strcmp(comando,"clustersLibres")==0){
		printf("comando: %s   ....obteniendo clusters libres\n",comando);
		return 0;
		}

	if(strcmp(comando,"agregarClustersLibres")==0){
			printf("comando: %s   ....agregando clusters libres\n",comando);
			return 0;
			}

	if(strcmp(comando,"removerClustersLibres")==0){
			printf("comando: %s   ....removiendo clusters libres\n",comando);
			return 0;
			}

	if(strcmp(comando,"obtenerContenido")==0){
			printf("comando: %s   ....obteniendo contenido del cluster\n",comando);
			return 0;
			}

	if(strcmp(comando,"leerEntradas")==0){
			printf("comando: %s   ....leyendo entradas de directorio\n",comando);
			return 0;
			}

	if(strcmp(comando,"leerContenidoDir")==0){
		printf("comando: %s,     ....leyendo contenido del directorio\n",comando);return 0;
	} else {
		printf("comando: %s,invalido\n",comando);

	}
	return 0;

}

void procesarConsolaFS(){

	char* comand = (char*)malloc(50);

		scanf("%s",comand);

		while (strcmp(comand,"exit") != 0) {
			procesarComandoFS(comand);
			scanf("%s",comand);
		}
}

//TODO: agregar comportamiento para cada comando procesado. ej: leerBoot que invoke a leerBoot.

